import Cartesian2 from '../Core/Cartesian2.js';
import Cartesian3 from '../Core/Cartesian3.js';
import Cartesian4 from '../Core/Cartesian4.js';
import ComponentDatatype from '../Core/ComponentDatatype.js';
import Matrix2 from '../Core/Matrix2.js';
import Matrix3 from '../Core/Matrix3.js';
import Matrix4 from '../Core/Matrix4.js';

    var ComponentsPerAttribute = {
        SCALAR : 1,
        VEC2 : 2,
        VEC3 : 3,
        VEC4 : 4,
        MAT2 : 4,
        MAT3 : 9,
        MAT4 : 16
    };

    var ClassPerType = {
        SCALAR : undefined,
        VEC2 : Cartesian2,
        VEC3 : Cartesian3,
        VEC4 : Cartesian4,
        MAT2 : Matrix2,
        MAT3 : Matrix3,
        MAT4 : Matrix4
    };

    /**
     * @private
     */
    function getBinaryAccessor(accessor) {
        var componentType = accessor.componentType;
        var componentDatatype;
        if (typeof componentType === 'string') {
            componentDatatype = ComponentDatatype.fromName(componentType);
        } else {
            componentDatatype = componentType;
        }

        var componentsPerAttribute = ComponentsPerAttribute[accessor.type];
        var classType = ClassPerType[accessor.type];
        return {
            componentsPerAttribute : componentsPerAttribute,
            classType : classType,
            createArrayBufferView : function(buffer, byteOffset, length) {
                return ComponentDatatype.createArrayBufferView(componentDatatype, buffer, byteOffset, componentsPerAttribute * length);
            }
        };
    }
export default getBinaryAccessor;
